// 日期格式化
export const formatDate = (date, fmt = 'YYYY-MM-dd HH:mm:ss') => {
  if (date == null || date === '') return ''
  date = new Date(date)
  var o = {
    'Y+': date.getFullYear(), // 年
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
    'H+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  }
  var week = {
    0: '/u65e5',
    1: '/u4e00',
    2: '/u4e8c',
    3: '/u4e09',
    4: '/u56db',
    5: '/u4e94',
    6: '/u516d'
  }
  var month = {
    0: 'January',
    1: 'Februay',
    2: 'March',
    3: 'April',
    4: 'May',
    5: 'June',
    6: 'July',
    7: 'August',
    8: 'September',
    9: 'October',
    10: 'November',
    11: 'December',
  }
  var mon = {
    0: 'Jan',
    1: 'Feb',
    2: 'Mar',
    3: 'Apr',
    4: 'May',
    5: 'Jun',
    6: 'Jul',
    7: 'Aug',
    8: 'Sep',
    9: 'Oct',
    10: 'Nov',
    11: 'Dec',
  }
  if (/(Y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  // E+ 星期
  if (/(E+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[date.getDay() + ''])
  }

  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }

  // N+ 完整英文月份
  if (/(N+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, month[date.getMonth() + ''])
  }
  // n+ 简写英文月份
  if (/(n+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, mon[date.getMonth() + ''])
  }

  return fmt
}

// 获取图片base64
export const getImgBase64 = (img) => {
  return new Promise((resolve) => {
    const reader = new FileReader()
    reader.addEventListener('load', () => resolve(reader.result))
    reader.readAsDataURL(img)
  })
}

// 过滤参数空字段
export const filterParams = (params, strict = false) => {
  const obj = {}
  for (const key in params) {
    if (strict) {
      if (params[key] != null && params[key] !== '' && params[key] !== 0) {
        obj[key] = params[key]
      }
    } else {
      if (params[key] != null && params[key] !== '') {
        obj[key] = params[key]
      }
    }
  }
  return obj
}

// 防抖
export const debounce = (fn, wait) => {
  var last = null

  return function () {
    clearTimeout(last)

    var args = arguments
    last = setTimeout(function () {
      fn.apply(this, args)
    }, wait)
  }
}

// 截流
export const throttle = (fn, wait) => {
  var last = 0
  return function () {
    var curr = +new Date()
    if (curr - last > wait) {
      fn.apply(this, arguments)
      last = curr
    }
  }
}

// 筛选数组元素
export const getArrayItem = (arr = [], condition = {}) => {
  return arr.find(item => {
    for (const key in condition) {
      if (item[key] !== condition[key]) return false
    }
    return true
  })
}
